package com.algorithm;

/**
 * <pre>
 * 分而治之 => D&C (Divide And Conquer)
 * 示例：假设你是农场主，有一块土地。
 * 长：1680m  宽：640m
 * 如何将这块地区均匀分成方块，且分出的方块是最大的呢？
 * 分析：使用D&C策略！D&C算法是递归的。使用D&C解决问题的过程包括两个步骤
 * 1、找出基线条件（函数不再调用自己），这种条件必须尽可能简单；
 * 2、不断将问题分解（或者说缩小规模），直到符合基线条件。
 *
 * 基线条件 =>> length == width
 * 递归条件 =>> length != width
 * </pre>
 */
class DivideAndConquer {

    public static void main(String[] args) {
        int length = 1680;
        int width = 640;
        doRecursive(length, width);
    }

    private static void doRecursive(int length, int width) {
        if (length == width) {
            System.out.println("分出最大的方块长度为 =>> " + length);
            return;
        }
        if (length > width) {
            length = length - width;
        } else {
            width = width - length;
        }
        doRecursive(length, width);
    }

}